/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package objetos;

import DataTypes.DataEvento;
import DataTypes.DataGrupo;
import DataTypes.DataRol;
import Hndlr.HndlrUsuario;
import Interfaces.Factory;
import enums.enumEvento;
import enums.enumRol;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;

/**
 *
 * @author Sebas
 */
public class Grupo {
    private String nombre;
    private String desc;
    private int cantParticipantes;
    private Muro muro;
    private ArrayList<Rol> usr;
    private String img;
    private Calendar fechaCreacion;
    private HashMap<String,Even> calEventos;

    public Grupo() {
        muro = new Muro();
        usr = new ArrayList<Rol>();
        calEventos = new HashMap<String,Even>();
        fechaCreacion = new GregorianCalendar();
    }

    public ArrayList<DataRol> getRoles(){
        
        ArrayList<DataRol> roles = new ArrayList<DataRol>();
        Iterator<Rol> it = usr.iterator();
        DataRol drol;
        Rol rol;
        while(it.hasNext())
        {
            rol = it.next();
            drol = new DataRol(rol.getUsr().getDusuario(), rol.getRolUsr());
            roles.add(drol);
            
        }
        return roles;
    }
    public Calendar getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Calendar fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    public int getCantParticipantes() {
        return cantParticipantes;
    }

    public void setCantParticipantes(int cantParticipantes) {
        this.cantParticipantes = cantParticipantes;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public Muro getMuro() {
        return muro;
    }

    public void setMuro(Muro muro) {
        this.muro = muro;
    }

    public ArrayList<Rol> getUsr() {
        return usr;
    }
    
    
    public ArrayList<DataRol> getDUsr() {
        
        DataRol drol = new DataRol();
        Rol rol;
        Iterator<Rol> it = usr.iterator();
        ArrayList<DataRol> list = new ArrayList<DataRol>();
                
        while(it.hasNext()){
            
            rol = it.next();
            drol.setRolUsr(rol.getRolUsr());
            drol.setUsr(rol.getUsr().getDusuario());
            list.add(drol);
        }
        
        return list ;
    }

    public void setUsr(ArrayList<Rol> usr) {
        this.usr = usr;
    }
    
    public Grupo(DataGrupo dg) {

        this();
        nombre = dg.getNombre();
        desc = dg.getDesc();
        fechaCreacion = dg.getFechaCreacion();
        HndlrUsuario Husu = HndlrUsuario.getInstance();
        ArrayList<String> listModeradores = new ArrayList<String>(dg.getModeradores());
        ArrayList<String> listParticipantes = new ArrayList<String>(dg.getParticipantes());
        String creador = dg.getCreador();
        Iterator<String> itera = listModeradores.iterator();
        Usuario usu;
        Rol r;
        while (itera.hasNext()){
            usu = (Usuario) Husu.listaUsuarios().get(itera.next());
            r = new Rol(usu, enumRol.MODERADOR);
            usr.add(r);
            cantParticipantes++;
        }
        itera = listParticipantes.iterator();
        while (itera.hasNext()){
            usu = (Usuario) Husu.listaUsuarios().get(itera.next());
            r = new Rol(usu, enumRol.PARTICIPANTE);
            usr.add(r);
            cantParticipantes++;
        }
        usu = (Usuario) Husu.listaUsuarios().get(creador);
        r = new Rol(usu, enumRol.CREADOR);
        usr.add(r);
        cantParticipantes++;
        img = dg.getImg();
        calEventos = new HashMap<String, Even>();
    }

    public Grupo(String nombre, String desc) {
        this.nombre = nombre;
        this.desc = desc;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public void agregarRol(Rol r){
        usr.add(r);
        cantParticipantes++;
    }

    public Rol obtenerRol(String mailUsr) {
        Iterator<Rol> itera = usr.iterator();
        boolean seEncontro = false;
        Rol r = null;
        while (!seEncontro){
            r = itera.next();
            seEncontro = r.getUsr().getCorreo().equals(mailUsr);
        }
        return r;
    }

    public void agregarEvento ( DataEvento even){
        
        Even ev = new Even(even);
        calEventos.put(ev.getNombre(),ev);
        
    }

    boolean perteneceUsuarioGrupo(String correo) {
        
        Iterator<Rol> itera = usr.iterator();
        boolean pertenece = false;
        while (itera.hasNext() && !pertenece){
            if (itera.next().getUsr().getCorreo().equals(correo))
                pertenece = true;
        }
        
        return pertenece;

    }


    public void agregarContenidoMuro(Contenido contImg) {
        
        muro.agregarContenido(contImg);
        
    }
    
    public HashMap<String,Even> getCalendarioEventos(){
        
        return calEventos;
    }
    
   public HashMap<String,DataEvento> getDataEventos(){
        
        DataEvento dg;
        HashMap<String,DataEvento> listDg = new HashMap<String,DataEvento>();
        Iterator<Even> itera  = this.getCalendarioEventos().values().iterator();
        
        while (itera.hasNext()){
            
            Even e = itera.next();
            dg = new DataEvento(e.getNombre(), e.getTipoEvento(),e.isRepetible(),e.getFecha(),e.getDiasDeSemana(),e.getAutor());
            listDg.put(dg.getNombre(),dg);
        }
        
        return listDg;
        
        
    }

    public void etiquetarImagen(String titCont, Calendar fechaPub, ArrayList<String> correoEtiquetado) {
        muro.etiquetarImg(titCont, fechaPub, correoEtiquetado);
    }

    public void quitarEtiquetaImg(String titCont, Calendar fechaPub, String correoEtiquetado) {
        muro.quitarEtiquetaImg(titCont, fechaPub, correoEtiquetado);
    }

}
